跳到主要内容

Kubernetes 版本特性

本篇速查 Kubernetes 的版本发布节奏、版本偏差(skew)策略和各 minor 版本的关键变更,用于升级前的快速核对。完整变更以 官方 CHANGELOG 为准。

版本发布节奏​

项目约定说明
发布频率每年约 3 个 minor 版本早年是每年 4 个,1.22 起调整为 3 个,通常在 4 月、8 月、12 月前后发布
维护周期每个 minor 约 14 个月官方同时维护最近几个 minor 版本的发布分支,提供 bug 修复和安全补丁
patch 发布大约每月一次patch 版本只修 bug 和安全问题,不引入特性变化,跟进要勤快
版本号SemVer:主版本.次版本.补丁minor 变化意味着特性与 API 增减,升级要认真对待;patch 升级基本无风险

版本偏差(skew)策略​

各组件版本不要求完全一致,但偏差有上限:

组件组合允许偏差举例
kubectl ↔ apiserver前后各 1 个 minor1.29 的 kubectl 可管理 1.28 ~ 1.30 的集群
kubeadm ↔ apiserver前后各 1 个 minorkubeadm 1.30 可管理 1.29 ~ 1.30 的控制平面
kubelet ↔ apiserverkubelet 最多落后 3 个 minorapiserver 1.30 的集群里,kubelet 最低可以是 1.27,但不能比 apiserver 新
kube-proxy ↔ apiserver最多落后 3 个 minor与 kubelet 同理,也不能比 apiserver 新

升级规则​

  • 升级不能跨 minor 版本,必须逐级升:1.27 → 1.28 → 1.29,跳级(如 1.27 → 1.29)不受支持
  • patch 版本之间可以跳:1.28.1 可以直接升 1.28.9
  • 升级顺序:先控制平面,再 node 组件(kubelet、kube-proxy),工作负载不用动
  • 每升一级先验证集群和业务正常,再继续升下一级;大版本差距越大越要分段走

关键版本变更​

版本发布时间关键变更
1.202020-12宣布弃用 dockershim(当时只是警告,Docker 还能继续用);卷快照(Volume Snapshot)功能转正 GA
1.212021-04CronJob 转正 GA(batch/v1);宣布弃用 PodSecurityPolicy(PSP),预告后续由新方案替代
1.222021-08Ingress networking.k8s.io/v1 转正,v1beta1 移除;同批移除 CRD、APIService、RBAC 等一大批旧 v1beta1 API,是升级重灾区
1.232021-12IPv4/IPv6 双栈转正 GA;HorizontalPodAutoscaler autoscaling/v2 转正 GA;Pod Security Admission 进入 beta
1.242022-05正式移除 dockershim,kubelet 不再直连 Docker,须切换 containerd 或 CRI-O;ServiceAccount token 不再自动生成对应 Secret,改用 TokenRequest API
1.252022-08移除 PodSecurityPolicy(PSP),由内置的 Pod Security Admission 接替;in-tree 卷到 CSI 的迁移功能转正 GA
1.262022-12移除 autoscaling/v2beta2(HPA 必须用 autoscaling/v2);kubelet 不再支持 CRI v1alpha2,containerd 需 1.6+
1.272023-04镜像仓库从 k8s.gcr.io 全面迁移到 registry.k8s.io,旧仓库冻结不再更新;Seccomp 默认配置(SeccompDefault)转正 GA
1.282023-08kubelet 与 apiserver 的允许偏差从 2 个 minor 放宽到 3 个;Sidecar 容器(原生边车)进入 alpha
1.292023-12Sidecar 容器(restartPolicy: Always 的 init 容器)进入 beta,默认开启;ReadWriteOncePod 卷访问模式转正 GA
1.302024-04ValidatingAdmissionPolicy(CEL 表达式校验,可替代部分 webhook)转正 GA;Pod 调度就绪(scheduling readiness)转正 GA
1.312024-08移除遗留的多个 in-tree 云厂商集成插件,云厂商相关能力一律改用外部云控制器管理器(CCM)和 CSI;AppArmor 支持转正 GA
1.322024-12详见官方 CHANGELOG
1.332025-04Sidecar 容器转正 GA;原地(in-place)Pod 垂直扩缩进入 beta,部分场景下可不重建 Pod 在线调整 CPU/内存的 request 和 limit
1.22 和 1.24 是两道坎

跨越 1.22(大批 v1beta1 API 移除)和 1.24(dockershim 移除)的升级最容易踩坑:前者要求清单先换用新 API 版本,后者要求容器运行时先迁移到 containerd 或 CRI-O。老集群升级前先解决这两个问题,再逐级往上走。

GA / Beta / Alpha 是什么

Alpha 默认关闭、随时可能改接口或直接删掉;Beta 通常默认开启、接口基本稳定但细节仍可能调整;GA(转正、正式发布)表示长期稳定,受版本偏差和弃用政策保护。生产环境只用 Beta 后期和 GA 的功能。

版本选择建议​

场景建议
生产环境落后最新版 1 ~ 2 个 minor,吃够社区踩坑反馈再升,同时保证仍在官方维护期内
学习/测试环境可以直接上最新版,提前熟悉新特性和废弃项
云厂商托管集群(EKS/ACK 等)以厂商支持的版本范围为准,通常比上游落后几个 minor,停售版本前必须升走

升级前检查清单​

  1. 通读目标版本的 CHANGELOG 和 官方废弃 API 迁移指南
  2. 用工具扫描存量 YAML 和集群活资源,确认没在用已废弃的 API:
    • kubent(Kube No Trouble):扫描集群活资源和本地文件
    • pluto:扫描文件、Helm release 里的废弃 API
  3. 确认容器运行时、CNI、Ingress 控制器等周边组件兼容目标版本
  4. 备份 etcd,先在测试集群完整演练一遍升级流程,再动生产
弃用不等于移除

Kubernetes 的 API 弃用政策给了缓冲期:beta API 宣布弃用后至少保留 9 个月或 3 个 minor 版本,GA API 至少保留 12 个月或 3 个 minor 版本(取较长者),之后才会真正删除。看到 deprecated 警告就该动手迁移,不要等到升级时被已移除的 API 卡住。